package com.mycode.singleton01;

/**
 * 单例模式总结：结构简单、目标明确、理解容易
 * 优点：节约系统资源，不频繁创建和销毁对象，提高系统性能
 *      允许可变数目的实例，控制指定个数的实例化对象
 * 缺点：没有抽象层，不容易扩展
 *      单例类的职责过重，一定程度上违背了单一职责原则，将对象的创建和对象本身的功能耦合在一起
 *      单例实例化对象如果长时间不被利用，系统会认为它是垃圾，会自动销毁并回收资源，下次利用又将重新实例化，这将导致共享单例对象状态的丢失
 *      （这条存疑，因为JVM GC的时候使用可达性分析，可能是引用计数法会存在这个问题）
 * 使用场景：
 *      系统只需要一个实例对象，比如唯一的序列号生成器或资源管理器
 *      客户调用类的单个实例只允许使用一个公共访问点，出了该公共访问点，不能通过其他途径访问该实例
 */
// 启动类
public class Bootstrap {

    public static void main(String[] args) {
        // 只能通过 getInstance() 得到 TaskManager 实例化对象
        // TaskManager instance = TaskManager.getInstance();
        // TaskManager instance1 = TaskManager.getInstance();
        System.out.println("Bootstrap 加载 InnerClassSingleton");
        InnerClassSingleton instance = InnerClassSingleton.getInstance();
        InnerClassSingleton instance1 = InnerClassSingleton.getInstance();

        System.out.println(instance == instance1);
    }
}
